home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / share / guile / 1.8 / ice-9 / and-let-star.scm next >
Encoding:
Text File  |  2008-12-17  |  1.7 KB  |  50 lines

  1. ;;;; and-let-star.scm --- and-let* syntactic form (draft SRFI-2) for Guile
  2. ;;;; written by Michael Livshin <mike@olan.com>
  3. ;;;;
  4. ;;;;     Copyright (C) 1999, 2001, 2004, 2006 Free Software Foundation, Inc.
  5. ;;;; 
  6. ;;;; This library is free software; you can redistribute it and/or
  7. ;;;; modify it under the terms of the GNU Lesser General Public
  8. ;;;; License as published by the Free Software Foundation; either
  9. ;;;; version 2.1 of the License, or (at your option) any later version.
  10. ;;;; 
  11. ;;;; This library is distributed in the hope that it will be useful,
  12. ;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. ;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  14. ;;;; Lesser General Public License for more details.
  15. ;;;; 
  16. ;;;; You should have received a copy of the GNU Lesser General Public
  17. ;;;; License along with this library; if not, write to the Free Software
  18. ;;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  19.  
  20. (define-module (ice-9 and-let-star)
  21.   :export-syntax (and-let*))
  22.  
  23. (defmacro and-let* (vars . body)
  24.  
  25.   (define (expand vars body)
  26.     (cond
  27.      ((null? vars)
  28.       (if (null? body)
  29.       #t
  30.       `(begin ,@body)))
  31.      ((pair? vars)
  32.       (let ((exp (car vars)))
  33.         (cond
  34.          ((pair? exp)
  35.           (cond
  36.            ((null? (cdr exp))
  37.             `(and ,(car exp) ,(expand (cdr vars) body)))
  38.            (else
  39.             (let ((var (car exp)))
  40.               `(let (,exp)
  41.                  (and ,var ,(expand (cdr vars) body)))))))
  42.          (else
  43.           `(and ,exp ,(expand (cdr vars) body))))))
  44.      (else
  45.       (error "not a proper list" vars))))
  46.  
  47.   (expand vars body))
  48.  
  49. (cond-expand-provide (current-module) '(srfi-2))
  50.